1. Field of the Invention
The present invention is generally related to computer software application management. More particularly, the present invention is related to managing thread priority in multi-threaded application environments based on object creation rates.
2. Description of the Related Art
When working with multi-threaded application environments oftentimes a single thread can dominate the workload such that the thread's priority needs to be modified (lowered) to allow other work to continue. For example, in some cases a single “misbehaving” thread may create a disproportionate number of new objects each time the thread is executed. Because such a thread may be allocated memory from a common source, when it creates a disproportionate number of objects, the performance of each thread that shares the common memory source may suffer. This may occur because a garbage collector may be invoked to recover memory allocated to threads that share the same memory pool. Generally, a garbage collector may reclaim memory for an object created by a thread once the memory is no longer needed. However, on most application platforms used today, all threads suffer the penalty of waiting for the garbage collector to clean up objects. Therefore, when one object creates too many objects too quickly the performance of all threads active in a particular application environment will suffer. Further, if a “misbehaving” thread creates new objects at a very high rate, the garbage collector may be unable to keep up, and system performance may be substantially disrupted.
Currently, mechanisms exist for monitoring the performance of a multi-threaded application environment and for modifying the priority of a thread manually. For example, a method call may be invoked for a given thread to set the execution priority of that thread. These existing capabilities, however fall short of adjusting the execution priority of a thread priority when its determined that one thread is bottlenecking other threads in a multi-threaded environment. Further, current systems do not provide the ability to manage thread priority based on object creation rates. However, as described, a single thread that creates an excessive number of new objects is oftentimes disruptive of overall system performance
Accordingly, there remains a need for a mechanism to monitor and adjust the execution priority of a thread in a multi-threaded environment, based on object creation rates.